<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        // 超超超大的项目; 可以把构造函数用于继承;
        // 龙生龙，凤生凤，老鼠的儿子会打洞;

        // 1. 定义一个 Dog 构造函数
        function Dog(name, age) {
            this.name = name;
            this.age = age;
        }
        Dog.prototype.eat = function () {
            console.log('吃东西');
        }
        Dog.prototype.sleep = function () {
            console.log('睡觉');
        }

        // 2. 定义一个 Tidy 构造函数
        function Tidy(name, age, address) {
            this.name = name;
            this.age = age;
            this.address = address;
        }

        // 继承，让Tidy具有Dog原型对象中的方法
        //   用Dog的实例对象覆盖Tidy的原型，以后Tidy添加原型方法，不会影响到Dog原型;
        //   但是如果调用Dog原型中的方法，Dog的实例可以去访问;
        // 注意: 如果使用 Dog.prototype ，那么 Tidy.prototype 修改， 
        //          Dog.prototype也会跟踪修改，所以改为使用 new Dog();
        Tidy.prototype = new Dog();  
        Tidy.prototype.constructor = Tidy;
        // 给Tidy新增功能
        Tidy.prototype.play = function () {
            console.log('Tidy玩儿皮球');
        }

        // 创建实例
        const t1 = new Tidy('小灰灰', 1, '新天地校区');
        t1.sleep();
        t1.drink();
        t1.eat();
        console.log(t1.constructor);
        console.log(Dog.prototype);
    </script>
</body>
</html>